The present application relates to digital data processing.
Machine-readable codes are physical codes that encode data in a manner that enables the data to be read quickly and accurately by a machine. Examples of machine-readable codes include bar codes and radio frequency identification (RFID) tags.
A machine-readable code is produced by encoding input data according to a symbology or encoding scheme, and then generating a physical code (i.e., a physical representation of the encoded data). The generation of a physical code can be accomplished through many different types of processes (e.g., printing the code on a substrate such as a piece of paper), and generally represents a transition of the input data from an electronic environment to a tangible environment (e.g., a paper environment). As a further example of the different processes that can be used to generate a machine-readable code, the printing process itself can involve many different types of sub-processes. For example, printing a machine-readable code can involve printing in the traditional sense of depositing ink on paper (e.g., to create a pattern of light and dark elements in a bar code). As another example, printing a machine-readable code can involve depositing conductive, semi-conductive, or non-conductive chemicals or other materials on paper or on other substrates (e.g., to create a circuit pattern in an RFID tag).
A bar code is a common example of a machine-readable code. A bar code is typically made up of a pattern of dark elements (e.g., bars) and light elements (e.g., spaces between the bars). In traditional or “linear” bar codes, the dark elements are usually vertical bars of varying width or height (hence the “bar code” terminology). In newer, two-dimensional bar codes, the dark elements can be squares, rectangles, hexagons, or other two-dimensional shapes arranged in two-dimensional patterns.
A bar code can include a clear margin or “quiet zone” around the bar code, a finder pattern to help identify the location and/or the ends of the bar code, a pattern of light and dark elements that represents the data encoded in the bar code, and a pattern of light and dark elements that represents one or more encoded values used for purposes of error detection and correction (e.g., checksum values). A finder pattern can be, for example, a start or stop pattern placed at the leading or trailing edge of a bar code, a bulls-eye pattern placed in the middle of a two-dimensional bar code, or some other predefined pattern placed around the perimeter of a two-dimensional bar code.
A bar code reader such as a pen reader or a laser scanner typically decodes a bar code by scanning a light source across the bar code and measuring the intensity of light reflected back from the bar code. Light is reflected from the bar code in a pattern that mirrors the arrangement of the dark and light elements. A photodiode can be used to convert the pattern of reflected light into an electrical signal, and the electrical signal can be decoded back to the original data by comparing the electrical signal to patterns of light and dark elements defined in a bar code symbology.
A symbology is an encoding scheme for a machine-readable code. Most symbologies were created to meet the needs of specific industries, and as such, they are designed to encode different types and amounts of data. Examples of traditional, linear bar code symbologies include the UPC-A and Code 39 symbologies. UPC-A (Universal Product Code-A) is a symbology that is used to identify retail products. A UPC-A bar code can encode up to 12 numeric digits—a leading digit that usually represents a product type, a 10-digit UPC (Universal Product Code) assigned to the product by the Uniform Code Council, Inc., and a one digit checksum value. Code 39 is a variable length symbology that can encode 44 different characters—that is, a Code 39 bar code can encode messages of different lengths (typically up to 40 characters) that are made up of the 44 allowed characters, which include numeric digits and capital letters. As an encoding example in the Code 39 symbology, the pattern “wide bar, narrow space, narrow bar, narrow space, narrow bar, wide space, narrow bar, narrow space, wide bar” is used to encode the character “A”.
Examples of two-dimensional bar code symbologies include MaxiCode, Data Matrix, Aztec Code, and PDF417 (Portable Data File 417). MaxiCode is a symbology that was developed by United Parcel Service, Inc., for purposes of package identification and tracking. MaxiCode bar codes are fixed size matrixes that can represent up to 138 numeric digits or up to 93 alphanumeric characters. Data Matrix, Aztec Code, and PDF417 are high density symbologies that can generally encode several thousand bytes of any type of data (including alphanumeric characters and binary data) in a single bar code.
Although two-dimensional bar codes can encode large amounts of data, two-dimensional symbologies can be complex and difficult to use. For example, the PDF417 symbology specifies that a complete PDF417 bar code symbol is to be produced by stacking codewords on top of each other. Specifically, each PDF417 bar code is to include at least three rows, where each row is made up of a start pattern, up to 30 codewords, and a stop pattern. Each codeword must consist of a pattern of 4 bars and 4 spaces, and must be 17 modules wide. (A “module” is the narrowest allowed width of a bar or space, and each bar or space can be up to six modules wide.)
Moreover, the complete PDF417 specification, developed by Symbol Technologies, Inc., provides many user encoding options: A user can specify the module width, the height of the rows, the aspect (height to width) ratio of a complete PDF417 symbol, the level of data compaction (which allows more than one character to be encoded in a single codeword), and the level of error detection and correction (which allows undecodable or corrupted portions of a symbol to be reconstructed) that are to be used in the creation of a PDF417 symbol.
As a further example of the complexity of the PDF417 symbology, the current PDF417 specification allows the user to select one of nine different levels of error detection and correction. Higher levels allow more codewords to be recovered if the codewords are either un-scannable or mis-scanned, but they require more overhead per bar code symbol. The appropriate level of error detection and correction to use depends on various factors that can affect the legibility of a bar code, including the print contrast between the light and dark elements, the sharpness of the edges of the dark elements, the frequency and size of spots in light elements and voids in dark elements, the ability to produce elements whose dimensions are within allowed tolerances, the clarity of the quiet zones around a bar code, and the smoothness of the surface on which a bar code is located.